package algorithm.sort;

/**
 * 冒泡排序:从第一位开始,两两对比,大数后移
 * @author jiaqi.han
 * @date 2021年3月24日
 */
public class BubbleSort extends CommonSort implements Sortable {

	/**
	 * 需要的循环次数为N-1次,每次循环的比较次数也为N-1次,又由于每一次排序都能够自后向前依次确定数的位置,故每次实际需要比较的次数为N-1-i
	 */
	public void sort(int[] targetArr) {
		int temp = 0;
		// 如果某次循环中,已经没有任何交换了,说明已经排序成功,可以跳出循环,直接输出排序结果了
		boolean flag = false;
		for (int i = 0; i < targetArr.length - 1; i++) {
			for (int j = 0; j < targetArr.length - 1 - i; j++) {
				if (targetArr[j] > targetArr[j + 1]) {
					temp = targetArr[j];
					targetArr[j] = targetArr[j + 1];
					targetArr[j + 1] = temp;
					flag = true;
				}
			}
			displaySortedArray(i, targetArr);
			if (flag) {
				flag = false;
			} else {
				break;
			}
		}
	}
}
